package com.example.demo.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.dto.AttributeListRequestDTO;
import com.example.demo.dto.AttributeLogRequestDTO;
import com.example.demo.controller.bean.Result;
import com.example.demo.mapper.AttributeManageMapper;
import com.example.demo.mapper.entity.Attribute;
import com.example.demo.mapper.entity.StudentAttribute;
import com.example.demo.mapper.entity.StudentAttributeView;
import com.example.demo.service.AttributeManageService;
import com.example.demo.utils.PageBo;
import com.example.demo.utils.PageVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class AttributeManageServiceImpl extends ServiceImpl<AttributeManageMapper, Attribute> implements AttributeManageService {
    @Autowired
    private AttributeManageMapper mapper;

    @Override
    public PageVo<Attribute> getAttributeList(PageBo pageBo) {
        List<Attribute> logs = mapper.getAttributeList();
        return new PageVo<>(pageBo, logs);
    }

    @Override
    public PageVo<Attribute> searchAttributeList(String name, PageBo pageBo) {
        List<Attribute> list = mapper.getAttributeList();
        list = list.stream()
                .filter(o -> (name == null || o.getName().contains(name))).collect(Collectors.toList());
        return new PageVo<>(pageBo, list);
    }

    @Override
    public Result<String> addAttribute(AttributeListRequestDTO request) {
        Attribute newAttribute = new Attribute();
        newAttribute.setName(request.getName());
        newAttribute.setDescription(request.getDescription());
        if(request.getName()!=null){
            if (mapper.insert(newAttribute) > 0) {
                return Result.ok("添加成功");
            } else {
                return Result.fail("添加失败");
            }
        }
        return Result.fail("屬性名爲空");
    }

    @Override
    public Result<String> deleteAttributeList(Attribute attribute) {
        int id=attribute.getAttributeId();
        if(id!=0){
            mapper.deleteAttributeById(attribute);
            return Result.ok("删除成功");
        }else{
            return Result.error(400, "删除失败");
        }
    }

    @Override
    public void batchDeleteAttributeList(List<Attribute> attributeList) {
        mapper.deleteAttributeList(attributeList);
    }

    @Override
    public Result<String> updateAttributeList(AttributeListRequestDTO request) {
        Attribute newAttribute = new Attribute();
        newAttribute.setAttributeId(request.getAttributeId());
        newAttribute.setName(request.getName());
        newAttribute.setDescription(request.getDescription());

        if(newAttribute!=null){
            mapper.updateAttributeList(newAttribute);
            return Result.ok("修改成功");
        }
        else {
            return Result.fail("修改失败");
        }
    }

    @Override
    public PageVo<StudentAttributeView> getAttributeLog(PageBo pageBo) {
        List<StudentAttributeView> logs = mapper.getAttributeLog();
        return new PageVo<>(pageBo, logs);
    }

    @Override
    public PageVo<StudentAttributeView> searchAttributeLog(AttributeLogRequestDTO request, PageBo pageBo) {
        String attributeName=request.getAttributeName();
        String studentName=request.getStudentName();
        List<StudentAttributeView> list = mapper.getAttributeLog();
        list = list.stream()
                .filter(o ->(attributeName == null || o.getAttributeName().contains(attributeName)) &&
                        (studentName == null || o.getStudentName().contains(studentName)))
                .collect(Collectors.toList());
        return new PageVo<>(pageBo, list);
    }


    @Override
    public Result<String> updateAttributeLog(AttributeLogRequestDTO request) {
        StudentAttribute newAttribute = new StudentAttribute();

        newAttribute.setId(request.getId());
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime lastUpdatedTime = LocalDateTime.now();
        String format = lastUpdatedTime.format(formatter);
        newAttribute.setLastUpdated(format);
        newAttribute.setValue(request.getValue());

        if(newAttribute!=null){
            mapper.updateAttributeLog(newAttribute);
            return Result.ok("修改成功");
        }
        else {
            return Result.fail("修改失败");
        }
    }


}
